package cn.ware.house.interfaces.entity.goods;


import java.math.BigDecimal;
import java.util.List;

/**
 * 商品实体类，对应数据库中的`product`表，用于封装商品相关的信息。
 * 该类中的各个属性与数据库表中的字段一一对应，方便进行数据的持久化操作以及业务逻辑处理。
 */
public class Product {
    /**
     * 商品编号，唯一标识每个商品，自增长字段，对应数据库表中的`product_id`字段。
     * 在数据库中为自增长的整数类型，作为每个商品记录的唯一标识符，方便数据库层面的操作及关联查询等。
     */
    private Integer productId;
    /**
     * 商品名称，展示商品的名称，对应数据库表中的`product_name`字段。
     * 是一个长度不超过50个字符的字符串，用于直观展示商品的名称信息，便于识别和区分不同商品。
     */
    private String productName;
    /**
     * 商品规格，例如包装大小、型号等规格参数，对应数据库表中的`product_spec`字段。
     * 长度不超过30个字符的字符串，描述了商品具体的规格特性，有助于更详细地了解商品详情。
     */
    private String productSpec;
    /**
     * 进价，商品的进货价格，对应数据库表中的`purchase_price`字段。
     * 使用 `BigDecimal` 类型来精确表示带有两位小数的价格数值，记录商品的进货成本。
     */
    private BigDecimal purchasePrice;
    /**
     * 售价，商品销售给客户的价格，对应数据库表中的`sale_price`字段。
     * 同样使用 `BigDecimal` 类型精确表示带有两位小数的价格数值，代表商品对外销售的定价。
     */
    private BigDecimal salePrice;
    /**
     * 商品所属品牌，对应数据库表中的`brand`字段。
     * 长度不超过100个字符的字符串，标明商品所属的品牌，对于品牌相关的业务分析和展示有重要作用。
     */
    private String brand;
    /**
     * 关联的商品分类实体对象，对应数据库中的 `product_category` 表，借助该对象能知晓商品所属分类的详细信息。
     */
    private ProductCategory category;
    private String mainImagePath; // 商品主图照片路径
    private BigDecimal discount; // 商品折扣信息


    /**
     * 商品样式信息
     */
    private List<ProductStyle> styles; // 新增用于存储商品样式信息的集合属性



    public void setStyles(List<ProductStyle> styles) {
        this.styles = styles;
    }

    public Integer getProductId() {
        return productId;
    }

    public String getMainImagePath() {
        return mainImagePath;
    }

    public void setMainImagePath(String mainImagePath) {
        this.mainImagePath = mainImagePath;
    }

    public BigDecimal getDiscount() {
        return discount;
    }

    public void setDiscount(BigDecimal discount) {
        this.discount = discount;
    }

    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductSpec() {
        return productSpec;
    }

    public void setProductSpec(String productSpec) {
        this.productSpec = productSpec;
    }

    public BigDecimal getPurchasePrice() {
        return purchasePrice;
    }

    public void setPurchasePrice(BigDecimal purchasePrice) {
        this.purchasePrice = purchasePrice;
    }

    public BigDecimal getSalePrice() {
        return salePrice;
    }

    public void setSalePrice(BigDecimal salePrice) {
        this.salePrice = salePrice;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public ProductCategory getCategory() {
        return category;
    }

    public void setCategory(ProductCategory category) {
        this.category = category;
    }


    public List<ProductStyle> getStyles() {
        return styles;
    }

    @Override
    public String toString() {
        return "Product{" +
                "productId=" + productId +
                ", productName='" + productName + '\'' +
                ", productSpec='" + productSpec + '\'' +
                ", purchasePrice=" + purchasePrice +
                ", salePrice=" + salePrice +
                ", brand='" + brand + '\'' +
                ", category=" + category +
                ", mainImagePath='" + mainImagePath + '\'' +
                ", discount=" + discount +
                ", styles=" + styles +
                '}';
    }
}